Serverless Frameworkを用いたAWS Step Functionsステートマシン作成のチュートリアルをやってみた
こんにちは。サービスグループの武田です。
前回AWS CDKを利用して、AWS Step Functionsのチュートリアルをやってみました。ツールの違いによる構築方法の比較をしたかったため、同じ環境をServerless Frameworkを利用して構築してみました。ただし厳密にはまったく同じではなく、CDKで自動的に設定している部分などまでは追従していません。
環境
次のような環境で検証しました。
$ node -v v14.18.1 $ npm -v 8.1.1 $ sw_vers ProductName: macOS ProductVersion: 11.4 BuildVersion: 20F71
- Serverless Framework
- 2.64.1
- Serverless Step Functions
- 3.1.1
やってみた
まずはServerless Frameworkのプロジェクトを作成します。Lambda関数はPythonでもよかったのですがJavaScript(Node.js)にしてみました。プロジェクトが作成できたらStep Functions用のプラグインもインストールします。
$ npx serverless create -t aws-nodejs -n step-sls -p step-sls $ cd step-sls $ npm install -D serverless-step-functions
プラグインをインストールしたらserverless.yml
に設定を追記します。ファイルのコード全体は後ろに記載します。
plugins: - serverless-step-functions
Lambda関数のひな型がhandler.js
として用意されているため、Step Functionsのタスク状態から呼び出されるコードを定義します。
'use strict'; module.exports.handler = async (event) => { return "Hello World!"; };
続いてステートマシンの定義なども含めserverless.yml
を次のように修正します。stepFunctions
のセクションでステートマシンを定義しています。
service: step-sls frameworkVersion: '2' plugins: - serverless-step-functions provider: name: aws runtime: nodejs14.x lambdaHashingVersion: 20201221 region: ap-northeast-1 functions: hello: handler: handler.handler timeout: 25 stepFunctions: stateMachines: StateMachine1: name: SlsStateMachine definition: StartAt: HelloWorld States: HelloWorld: Type: Task Resource: Fn::GetAtt: [hello, Arn] Next: GreetedWorld GreetedWorld: Type: Succeed
準備が整いましたのでデプロイしてみましょう。筆者の環境ではprofileにIAMロールを使用しているため、環境変数を定義しています。
$ export AWS_SDK_LOAD_CONFIG=1 $ npx serverless deploy
また実行もコマンドラインから行えます。グローバルにインストールしていないことが原因なのか、レスポンスの内容が正常に表示されませんでした。
$ npx serverless invoke stepf --name StateMachine1 . [object Object]
マネジメントコンソールにアクセスしてみると正常に終了していることが確認できました。ResultPathなどを定義していないため、HelloWorld
状態の結果のみが入力値となっています。
まとめ
AWS CDKで構成したものをServerless Frameworkでもやってみました。IAMロールの作成はどちらも自動的にやってくれるため意識する必要はありませんでした。ステートマシンの定義はCDKだとコードでしたが、Serverless Frameworkの場合はASL(Amazon ステートメント言語)を直接書くことになります。
CDKを採用する場合、CDKのコーディングに慣れていればステートマシンのメンテナンスも負荷が軽そうです。一方で、Workflow Studioで作ったものをベースにメンテナンスしていきたいといった場合にはServerless Frameworkに分があるでしょうか。なお、前回のCDKではLambda関数のコードをインラインで記述していましたが、別ファイルにもできるため、そこは差別化ポイントとはならないと考えます。
どちらもメリットはありますので、メンバーのスキルセットや好みで選ぶでもよさそうです。